<?php

/**
 * 应用基类， 所有应用都从本类继承
 */
abstract class app
{
    public $name = ''; // 应用名， 对应应用安装的文件夹和应用类名
    public $label = ''; // 应用显示名 如  '用户管理系统'
    public $icon = null; // 应用图标
    public $app_id = 0; // 应用在骨头网站上的编号, 以便升级更新
    public $version = '1.0'; // 版本号
    

    protected $links = null;
    protected $menus = null;

    /**
     * 构造函数
     * 
     * @param string $name 应用类名
     * @param string $label 应用中文名
     * @param string $icon 图标
     * @param int $app_id 该应用在骨头网站上的编号
     * @param string $version 应用版本号
     * 
     */
    public function __construct($name, $label = '', $icon = null, $app_id = 0, $version = '1.0')
    {
        $this->name = $name;
        $this->label = $label;
        $this->icon = $icon;
        $this->app_id = $app_id;
        $this->version = $version;
    }

    /**
     * 添加一个前台链接项
     * 
     * @param string $name 链接名称
     * @param string $url 链接网址
     * @param array $params 可选参数
     * 
     * @return null
     */
    protected function add_link($name, $url, $params = null)
    {
        $link = new stdClass();
        $link->name = $name;
        $link->url = $url;
        $link->params = $params;
        
        $this->links[] = $link;
    }

    /**
     * 设置前台链接项
     * 
     * @return null
     */
    protected function set_links()
    {
    }

    /**
     * 获取所有前台链接项
     * 
     * @return array
     */
    public function get_links()
    {
        if ($this->links === null)
        {
            $this->links = array();
            $this->set_links();
        }
        return $this->links;
    }

    /**
     * 添加一个后台菜单项
     * 
     * @param $name 菜单名
     * @param $url 菜单网址
     * @param $icon 图标
     * 
     * @return null
     */
    protected function add_menu($name, $url, $icon = null)
    {
        $menu = new stdClass();
        $menu->name = $name;
        $menu->url = $url;
        $menu->icon = $icon;
        
        $this->menus[] = $menu;
    }

    /**
     * 设置后台菜单项
     * @return null
     */
    protected function set_menus()
    {
    }

    /**
     * 获取所有后台菜单项
     * 
     * @return array
     */
    public function get_menus()
    {
        if ($this->menus === null)
        {
            $this->menus = array();
            $this->set_menus();
        }
        return $this->menus;
    }

}


